/**
 * 
 */
package com.cuc.platform.core.componet.security.service;

import java.util.List;

import com.cuc.platform.core.componet.security.domain.SecurityMenu;
import com.cuc.platform.core.service.ServiceException;

/**
 * @author peepul
 *
 * 菜单服务接口
 */
public interface SecurityMenuService {
	/**
	 * 取所有对象
	 * 
	 * @return SecurityMenu List
	 */
	public List<SecurityMenu> getAllMenus();

	/**
	 * 根据主标识获取指定的对象
	 * 
	 * @param  id
	 * @return SecurityMenu
	 */
	public SecurityMenu getMenuById(Long id);
	
	/**
	 * 新增对象
	 * 
	 * @param menu
	 * @throws ServiceException
	 */
	public void insertMenu(SecurityMenu menu) throws ServiceException;
	
	/**
	 * 更新对象
	 * 
	 * @param menu
	 * @throws ServiceException
	 */
	public void updateMenu(SecurityMenu menu) throws ServiceException;
	
	/**
	 * 根据id删除对象
	 * 
	 * 注：删除成功返回值为1，如没找到要删除的数据返回0，如果删除出错，则产生异常
	 * @param id
	 */
	public void delMenu(Long id) throws ServiceException;
	
	/**
	 * 根据指定的菜单级别，显示出对应层次的菜单项列表
	 * 
	 * @param level：
	 * 	如：	0：一级菜单
	 * 		1：二级菜单
	 *      3：三级菜单
	 *      N：N级菜单 
	 *      
	 * @return List<SecurityMenu>
	 */
	public List<SecurityMenu> listMenuByLevel(Integer level);
	
	/**
	 * 根据指定的菜单项id，获取其子菜单项列表数据
	 * 
	 * @param id
	 * 
	 * @returnList<SecurityMenu>
	 */
	public List<SecurityMenu> listSubMenu(Long id);
	
	/**
	 * 查看某个菜单对应的角色及所有待选择的角色
	 * 
	 * 如果某个角色被选中，则对应的菜单对象不为空
	 * 
	 * @param menu_id
	 * @return List<SecurityMenu>
	 */
	public List<SecurityMenu> viewRoleswithMenus(Long menu_id);

	/**
	 * 查看某个角色对应的菜单及所有待选择的菜单
	 * 
	 * 如果某个菜单被选中，则对应的角色对象不为空
	 * 
	 * @param role_id
	 * @return List<SecurityMenu>
	 */
	public List<SecurityMenu> viewMenuswithRoles(Long role_id);
	
	/**
	 * 以角色为主，保存角色与菜单的关联关系。往ss_menu_role中保存关联数据
	 */
	public void saveRoleMenuUnions(String role_id, String[] menu_ids) throws ServiceException;
	
	/**
	 * 以菜单为主，保存角色与菜单的关联关系。往ss_menu_role中保存关联数据
	 */
	public void saveMenuRoleUnions(String menu_id, String[] role_ids) throws ServiceException;
	
	/**
	 * 根据用户账号，获取其对应的菜单项
	 * 
	 * 注：根据账号获取角色，再根据角色获取对应的菜单项。
	 *     由于用户、角色、菜单都是多对多的对应关系，需要过滤掉重复的菜单数据
	 * 
	 * @param userName 登录账号
	 */
	public List<SecurityMenu> listMenuByUser(String userName);
	
	/**
	 * 获取具有权限的某个级别菜单项列表
	 * 
	 * 注：不是某级别所有的菜单项，而是具有权限的列表
	 * 
	 *  @param userName 登录账号
	 *  @parem level 菜单级别
	 */
	public List<SecurityMenu> listLevelByUser(String userName, Integer level);
}
